/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlet;

import Negocio.Anuncio;
import Negocio.Archivo;
import Negocio.Bicicleta;
import Negocio.Evento;
import Negocio.EventoPrivado;
import Negocio.Foto;
import Negocio.Ruta;
import Negocio.Usuario;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.*;

/**
 *
 * @author JAVA
 */
public class subirArchivo extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    private static final String TEMPORAL_DIR = "temp";
    private static final String DESTINO_DIR = "dest";
    private File tmp;
    private String nombre;
    private String tipo;
    private String lugar;
    private String tiempo;
    private File des;
    private String producto;
    private double precio;
    private String desc;
    private int id;
    private int ano, mes, dia;
    private String provincia;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        // Compruebo si las carpetas existen y si no las creo
        // ************************************************************
        Date fecha = new Date();

        String ruta = getServletContext().getRealPath(TEMPORAL_DIR);
        tmp = new File(ruta);
        if (!tmp.exists()) {
            tmp.mkdir();
        }

        ruta = getServletContext().getRealPath(DESTINO_DIR);
        des = new File(ruta);
        if (!des.exists()) {
            des.mkdir();
        }

        HttpSession sesion = request.getSession();
        Usuario u = (Usuario) sesion.getAttribute("usuario");

        DiskFileItemFactory dfif = new DiskFileItemFactory();
        dfif.setRepository(tmp);

        ServletFileUpload sfu = new ServletFileUpload(dfif);

        try {
            List datos = sfu.parseRequest(request);
            Iterator itr = datos.iterator();

            while (itr.hasNext()) {
                FileItem item = (FileItem) itr.next();

                if (!item.isFormField() && tipo.equals("fotoPerfil")) {
                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1] == "") {
                        request.setAttribute("mensaje", "No has introducido un archivo");
                        request.getRequestDispatcher("perfilEditar.jsp").forward(request, response);
                    } else {

                        nombreArchivo = arrStr[arrStr.length - 1];
                        //para coger la extension y concatenarle el id del usuario sesion
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);
                        extension = extension.toLowerCase();
                        if (!extension.equals(".jpg") && !extension.equals(".png") && !extension.equals(".JPG") && !extension.equals(".PNG")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");
                            request.getRequestDispatcher("perfilEditar.jsp").forward(request, response);
                        } else {

                            String identificador = u.getId() + "";
                            nombreArchivo = identificador + extension;
                            //mete el archivo en la ruta
                            File archivo = new File(des + "\\fotoPerfil", nombreArchivo);
                            item.write(archivo);                            
                            //ahora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                            //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                            String rutaArchivo = nombreArchivo;

                            u.setRutaFoto(rutaArchivo);
                            u.actualizarUsuario();


                            Usuario uEventual = Usuario.seleccionarUsuario(u.getId());
                            sesion.setAttribute("usuario", uEventual);
                            sesion.setAttribute("usuarioShow", uEventual);

                            response.sendRedirect("perfilEditar.jsp");
                        }
                    }

                } else if (!item.isFormField() && tipo.equals("foto")) {
                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1] == "") {
                        request.setAttribute("mensaje", "No has introducido un archivo");
                        request.getRequestDispatcher("examinarFoto.jsp").forward(request, response);
                    } else {
                        nombreArchivo = arrStr[arrStr.length - 1];
                        Archivo a = new Foto(u, fecha, nombre, "");
                        a.crearArchivo();
                        //para coger la extension y concatenarle el id del usuario sesion
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);

                        if (!extension.equals(".jpg") && !extension.equals(".png") && !extension.equals(".JPG") && !extension.equals(".PNG")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");
                            request.getRequestDispatcher("examinarFoto.jsp").forward(request, response);
                        } else {

                            String identificador = a.getId() + "";
                            nombreArchivo = identificador + extension;

                            //mete el archivo en la ruta
                            File archivo = new File(des + "\\fotos", nombreArchivo);
                            item.write(archivo);
                            //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                            //String rutaArchivo = "dest\\\\fotos\\\\"+nombreArchivo;
                            String rutaArchivo = nombreArchivo;

                            a.setRutaArchivo(rutaArchivo);
                            a.actualizarArchivo();

                            response.sendRedirect("foto.jsp");
                        }
                    }
                } else if (!item.isFormField() && tipo.equals("ruta")) {

                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1] == "") {
                        request.setAttribute("mensaje", "No has introducido un archivo .kml");
                        request.getRequestDispatcher("examinarRuta.jsp").forward(request, response);
                    } else {
                        nombreArchivo = arrStr[arrStr.length - 1];
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);

                        if (!extension.equals(".kml") && !extension.equals(".KML")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .kml");
                            request.getRequestDispatcher("examinarRuta.jsp").forward(request, response);
                        } else {

                            Archivo a = new Ruta(u, fecha, nombre, nombreArchivo, lugar, tiempo);
                            a.crearArchivo();
                            //para coger la extension y concatenarle el id del usuario sesion

                            String identificador = a.getId() + "";
                            nombreArchivo = identificador + extension;
                            //String identificador = a.getId()+"";                    
                            //nombreArchivo = identificador+extension;
                            //mete el archivo en la ruta
                            File archivo = new File(des + "\\rutas", nombreArchivo);
                            item.write(archivo);

                            a.setRutaArchivo(nombreArchivo);
                            a.actualizarArchivo();

                            response.sendRedirect("ruta.jsp");
                        }

                    }

                } else if (!item.isFormField() && tipo.equals("fotoPerfilBici")) {

                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1].equals("")) {
                        request.setAttribute("mensaje", "No has introducido un archivo");
                        request.getRequestDispatcher("editarBicicleta.jsp").forward(request, response);
                    } else {

                        nombreArchivo = arrStr[arrStr.length - 1];
                        //para coger la extension y concatenarle el id del usuario sesion
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);
                        if (!extension.equals(".jpg") && !extension.equals(".png") && !extension.equals(".JPG") && !extension.equals(".PNG")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");
                            request.getRequestDispatcher("editarBicicleta.jsp").forward(request, response);
                        } else {

                            String identificador = id + "";
                            nombreArchivo = identificador + extension;
                            //mete el archivo en la ruta
                            File archivo = new File(des + "\\fotoPerfilBici", nombreArchivo);
                            item.write(archivo);
                            //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                            //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                            String rutaArchivo = nombreArchivo;

                            Bicicleta b = Bicicleta.seleccionarBicicleta(id);
                            b.setRutafoto(rutaArchivo);
                            b.actualizarBicicleta();


                            Usuario uEventual = Usuario.seleccionarUsuario(u.getId());
                            sesion.setAttribute("usuario", uEventual);
                            sesion.setAttribute("usuarioShow", uEventual);

                            response.sendRedirect("bicicleta.jsp");
                        }
                    }

                } else if (!item.isFormField() && tipo.equals("fotoAnuncio")) {

                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1].equals("")) {
                        request.setAttribute("mensaje", "No has introducido un archivo");
                        request.getRequestDispatcher("anuncios.jsp").forward(request, response);
                    } else{
                         nombreArchivo = arrStr[arrStr.length - 1];
                        //para coger la extension y concatenarle el id del usuario sesion
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);
                        if (!extension.equals(".jpg") && !extension.equals(".png") && !extension.equals(".JPG") && !extension.equals(".PNG")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");
                            request.getRequestDispatcher("anuncios.jsp").forward(request, response);
                        } else {
                            
                    
                    if(id==0){    
                    Anuncio a = new Anuncio(u.getId(),desc,"",producto,precio,fecha);
                    a.crearAnuncio(a);
                                            
                    String identificador = a.getIdAnuncio()+"";                    
                    nombreArchivo = identificador+extension;
                    //mete el archivo en la ruta
                    File archivo = new File(des+"\\fotoAnuncio",nombreArchivo);
                    item.write(archivo);
                    //aora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                    //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                    String rutaArchivo = nombreArchivo;
                    
                    a.setRutaFotoAnuncio(rutaArchivo);
                    a.actualizarAnuncio(a);
                    
                    response.sendRedirect("listAnuncios.jsp");
                    }else{
                    Anuncio a = Anuncio.seleccionarAnuncio(id);
                    
                    String identificador = a.getIdAnuncio()+"";                    
                    nombreArchivo = identificador+extension;
                    //mete el archivo en la ruta
                    File archivo = new File(des+"\\fotoAnuncio",nombreArchivo);
                    item.write(archivo);
                   
                    
                    response.sendRedirect("editarAnuncio.jsp");
                    }
                    
                    
                    }
                    }

                } else if (!item.isFormField() && tipo.equals("fotoEvento")) {

                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = null;
                    if (arrStr[arrStr.length - 1].equals("")) {
                        request.setAttribute("mensaje", "No has introducido un archivo");
                        request.getRequestDispatcher("eventos.jsp").forward(request, response);
                    } else {

                        nombreArchivo = arrStr[arrStr.length - 1];
                        //para coger la extension y concatenarle el id del usuario sesion
                        String extension = nombreArchivo.substring(nombreArchivo.length() - 4);
                        if (!extension.equals(".jpg") && !extension.equals(".png") && !extension.equals(".JPG") && !extension.equals(".PNG")) {
                            request.setAttribute("mensaje", "No has introducido un archivo .jpg o .png");
                            request.getRequestDispatcher("eventos.jsp").forward(request, response);
                        } else {
                            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                            String fechaE = ano + "-" + mes + "-" + dia;
                            Date fechaEvento = dateFormat.parse(fechaE);
                            
                            EventoPrivado e = new EventoPrivado(fechaEvento,nombre,desc,"",u,lugar,provincia);
                            
                            e.crearEvento();

                            String identificador = e.getId() + "";
                            nombreArchivo = identificador + extension;
                            //mete el archivo en la ruta
                            File archivo = new File(des + "\\fotoEvento", nombreArchivo);
                            item.write(archivo);
                            //ahora vamos a meter la ruta en la base de datos del usuario y actualizarlo
                            //String rutaArchivo = "dest\\\\fotoPerfil\\\\"+nombreArchivo;
                            String rutaArchivo = nombreArchivo;
                            
                            e.setRutaFoto(rutaArchivo);
                            e.modificarEvento();



                            Usuario uEventual = Usuario.seleccionarUsuario(u.getId());
                            sesion.setAttribute("usuario", uEventual);
                            sesion.setAttribute("usuarioShow", uEventual);

                            response.sendRedirect("eventos.jsp");
                        }
                    }

                } else {
                    //Nombre del campo
                    if (item.getFieldName().equals("titulo")) {
                        nombre = item.getString();
                    } else {
                        if (item.getFieldName().equals("tipo")) {
                            tipo = item.getString();
                        } else {
                            if (item.getFieldName().equals("lugar")) {
                                lugar = item.getString();
                            } else {
                                if (item.getFieldName().equals("tiempo")) {
                                    tiempo = item.getString();
                                } else {
                                    if (item.getFieldName().equals("id")) {
                                        id = Integer.parseInt(item.getString());
                                    } else {
                                        if (item.getFieldName().equals("Producto")) {
                                            producto = item.getString();
                                        } else {
                                            if (item.getFieldName().equals("Precio")) {
                                                precio = Integer.parseInt(item.getString());
                                            } else {
                                                if (item.getFieldName().equals("Descripcion")) {
                                                    desc = item.getString();
                                                } else {
                                                    if (item.getFieldName().equals("provincia")) {
                                                        provincia = item.getString();
                                                    } else {
                                                        if (item.getFieldName().equals("dia")) {
                                                            dia = Integer.parseInt(item.getString());
                                                        } else {
                                                            if (item.getFieldName().equals("mes")) {
                                                                mes = Integer.parseInt(item.getString());
                                                            } else {
                                                                if (item.getFieldName().equals("ano")) {
                                                                    ano = Integer.parseInt(item.getString());
                                                                }
                                                            }
                                                        }
                                                    }

                                                }

                                            }
                                        }
                                    }
                                }
                            }

                        }
                    }
                }

            }


        } catch (FileUploadException ex) {
            Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
